package io.gitee.devaper.starlight.security.config

import io.gitee.devaper.starlight.common.constant.*
import org.springframework.boot.convert.DurationUnit
import java.time.Duration
import java.time.temporal.*
import java.util.UUID

/**
 * 针对 Security 中 RememberMe 功能的配置
 */
class RememberProperties {

    /**
     * 是否启用rememberMe功能
     */
    var enable: Boolean = false

    /**
     * RememberMe信息的一个key, 相当于一个版本号
     *
     * 没有特殊需求不要修改, 与当前版本不一致的token将被视为无效
     */
    var key: String = "rm"

    /**
     * RememberMe信息中的一个密钥或key信息, 用来生成签名使用, 请保管好避免外泄
     */
    var secret: String = UUID.randomUUID().toString()

    /**
     * 永远保持记住, 而不是通过传递参数来决定是否记住
     */
    var always: Boolean = false

    /**
     * 如果没有设置永远保持记住, 那么该属性决定了传入什么参数时进行记住
     */
    var parameterName: String = "remember"

    /**
     * RememberMe Cookie的名称
     */
    var cookieName: String = "remember"

    /**
     * 开启安全Cookie, 仅可以通过HTTPS传输
     *
     * 如果是HTTP协议, 就不要打开了
     */
    var secure: Boolean = false

    /**
     * RememberMe Token的超时时间
     *
     * 格式:
     * - 1s = 1秒 (默认单位)
     * - 1m = 1分钟
     * - 1h = 1小时
     * - 1d = 1天
     */
    @DurationUnit(ChronoUnit.SECONDS)
    var timeout: Duration = Duration.ofDays(7)
}